using System.Collections.Generic;
using System;
using UnityEngine;
namespace Gameplay.PVE.Survivor
{
    public class SurvivorOutputFunction
    {
        private static Dictionary<int, Func<BattleUnit, BattleUnit, float>> outputFunctions = new Dictionary<int, Func<BattleUnit, BattleUnit, float>>();
        
        public static float DefaultOutput(BattleUnit attacker, BattleUnit target)
        {
            return 0;
        }
        
        public static float GetOutputValue(int elementId, BattleUnit attacker, BattleUnit defender)
        {
            var func = GetOutputFunction(elementId);
            return func(attacker, defender);
        }
        
        public static Func<BattleUnit, BattleUnit, float> GetOutputFunction(int elementId)
        {
            if (outputFunctions.TryGetValue(elementId, out var function))
            {
                return function;
            }
            else
            {
                function = FindOutputFunction(elementId);
                outputFunctions.Add(elementId,function);
                return function;
            }
        }
    
        public static float If(bool condition,float a,float b)
        {
            return condition ? a : b;
        }
        

        public static Func<BattleUnit,BattleUnit,float> FindOutputFunction(int elementId)
        {
            switch (elementId)
            {
                case 410000111: 
                    return Output410000111;

                case 410000121: 
                    return Output410000121;

                case 410010111: 
                    return Output410010111;

                case 410010211: 
                    return Output410010211;

                case 410010221: 
                    return Output410010221;

                case 410020111: 
                    return Output410020111;

                case 410020211: 
                    return Output410020211;

                case 410030111: 
                    return Output410030111;

                case 410030211: 
                    return Output410030211;

                case 410030221: 
                    return Output410030221;

                case 410040111: 
                    return Output410040111;

                case 410040211: 
                    return Output410040211;

                case 410040212: 
                    return Output410040212;

                case 410050111: 
                    return Output410050111;

                case 410050211: 
                    return Output410050211;

                case 410050212: 
                    return Output410050212;

                case 410060111: 
                    return Output410060111;

                case 410060221: 
                    return Output410060221;

                case 410060222: 
                    return Output410060222;

                case 410070111: 
                    return Output410070111;

                case 410070211: 
                    return Output410070211;

                case 410080111: 
                    return Output410080111;

                case 410080211: 
                    return Output410080211;

                case 410090111: 
                    return Output410090111;

                case 410090211: 
                    return Output410090211;

                case 410100111: 
                    return Output410100111;

                case 410100211: 
                    return Output410100211;

                case 410110111: 
                    return Output410110111;

                case 410110121: 
                    return Output410110121;

                case 410110211: 
                    return Output410110211;

                case 410110221: 
                    return Output410110221;

                case 410110231: 
                    return Output410110231;

                case 410110241: 
                    return Output410110241;

                case 410110251: 
                    return Output410110251;

                case 410110261: 
                    return Output410110261;

                case 410120111: 
                    return Output410120111;

                case 410120211: 
                    return Output410120211;

                case 410130111: 
                    return Output410130111;

                case 410130211: 
                    return Output410130211;

                case 410130311: 
                    return Output410130311;

                case 410140111: 
                    return Output410140111;

                case 410140211: 
                    return Output410140211;

                case 410170111: 
                    return Output410170111;

                case 410170211: 
                    return Output410170211;

                case 410180111: 
                    return Output410180111;

                case 410180211: 
                    return Output410180211;

                case 410190111: 
                    return Output410190111;

                case 410190211: 
                    return Output410190211;

                case 410200111: 
                    return Output410200111;

                case 410200231: 
                    return Output410200231;

                case 410210111: 
                    return Output410210111;

                case 410210112: 
                    return Output410210112;

                case 410210211: 
                    return Output410210211;

                case 410210212: 
                    return Output410210212;

                case 410220111: 
                    return Output410220111;

                case 410220211: 
                    return Output410220211;

                case 410230111: 
                    return Output410230111;

                case 410230211: 
                    return Output410230211;

                case 410240111: 
                    return Output410240111;

                case 410240211: 
                    return Output410240211;

                case 430010111: 
                    return Output430010111;

                case 430020111: 
                    return Output430020111;

                case 430030111: 
                    return Output430030111;

                case 430040111: 
                    return Output430040111;

                case 430040211: 
                    return Output430040211;

                case 430050111: 
                    return Output430050111;

                case 430060111: 
                    return Output430060111;

                case 430070111: 
                    return Output430070111;

                case 430080111: 
                    return Output430080111;

                case 430090111: 
                    return Output430090111;

                case 420010111: 
                    return Output420010111;

                case 420020111: 
                    return Output420020111;

                case 420030111: 
                    return Output420030111;

                case 420040111: 
                    return Output420040111;

                case 420050111: 
                    return Output420050111;

                case 420050211: 
                    return Output420050211;

                case 420060111: 
                    return Output420060111;

                case 420070111: 
                    return Output420070111;

                case 420080111: 
                    return Output420080111;

                case 420090111: 
                    return Output420090111;

                case 420100111: 
                    return Output420100111;

                case 420110111: 
                    return Output420110111;

                case 420110112: 
                    return Output420110112;

                case 420210111: 
                    return Output420210111;

                case 10101: 
                    return Output10101;

                case 10201: 
                    return Output10201;

                case 10202: 
                    return Output10202;

                case 10301: 
                    return Output10301;

                case 10401: 
                    return Output10401;

                case 10402: 
                    return Output10402;

                case 105: 
                    return Output105;

                case 510020111: 
                    return Output510020111;

                case 510020211: 
                    return Output510020211;

                case 510070111: 
                    return Output510070111;

                case 510070211: 
                    return Output510070211;

                case 510040111: 
                    return Output510040111;

                case 510040112: 
                    return Output510040112;

                case 510040113: 
                    return Output510040113;

                case 510040211: 
                    return Output510040211;

                case 510010111: 
                    return Output510010111;

                case 510010211: 
                    return Output510010211;

                case 510080111: 
                    return Output510080111;

                case 510080211: 
                    return Output510080211;

                case 510030111: 
                    return Output510030111;

                case 510030211: 
                    return Output510030211;

                case 510050111: 
                    return Output510050111;

                case 510050211: 
                    return Output510050211;

                case 510060111: 
                    return Output510060111;

                case 510060211: 
                    return Output510060211;

                case 600001011: 
                    return Output600001011;

                case 600001021: 
                    return Output600001021;

                case 600001022: 
                    return Output600001022;

                default:
                    BattleDebug.LogError(elementId + " 找不到元素公式");
                    return DefaultOutput;
            }
        }
    
        public static float Output410000111(BattleUnit attacker, BattleUnit defender)
        {
            return 1f*0.2f*attacker.AttackValue*attacker.AttackValue/(attacker.AttackValue+defender.DefenceValue);
        }
    
        public static float Output410000121(BattleUnit attacker, BattleUnit defender)
        {
            return 1f*0.8f*attacker.AttackValue*attacker.AttackValue/(attacker.AttackValue+defender.DefenceValue);
        }
    
        public static float Output410010111(BattleUnit attacker, BattleUnit defender)
        {
            return 1f*0.3f*attacker.AttackValue*attacker.AttackValue/(attacker.AttackValue+defender.DefenceValue);
        }
    
        public static float Output410010211(BattleUnit attacker, BattleUnit defender)
        {
            return 1f*0.4f*attacker.AttackValue*attacker.AttackValue/(attacker.AttackValue+defender.DefenceValue);
        }
    
        public static float Output410010221(BattleUnit attacker, BattleUnit defender)
        {
            return 1f*0.4f*attacker.AttackValue*attacker.AttackValue/(attacker.AttackValue+defender.DefenceValue);
        }
    
        public static float Output410020111(BattleUnit attacker, BattleUnit defender)
        {
            return 1f*0.3f*attacker.AttackValue*attacker.AttackValue/(attacker.AttackValue+defender.DefenceValue);
        }
    
        public static float Output410020211(BattleUnit attacker, BattleUnit defender)
        {
            return 1f*0.3f*attacker.AttackValue*attacker.AttackValue/(attacker.AttackValue+defender.DefenceValue);
        }
    
        public static float Output410030111(BattleUnit attacker, BattleUnit defender)
        {
            return 1f*1.56f*attacker.AttackValue*attacker.AttackValue/(attacker.AttackValue+defender.DefenceValue);
        }
    
        public static float Output410030211(BattleUnit attacker, BattleUnit defender)
        {
            return 1f*3.12f*attacker.AttackValue*attacker.AttackValue/(attacker.AttackValue+defender.DefenceValue);
        }
    
        public static float Output410030221(BattleUnit attacker, BattleUnit defender)
        {
            return 1f*0;
        }
    
        public static float Output410040111(BattleUnit attacker, BattleUnit defender)
        {
            return 1f*0.3f*attacker.AttackValue*attacker.AttackValue/(attacker.AttackValue+defender.DefenceValue);
        }
    
        public static float Output410040211(BattleUnit attacker, BattleUnit defender)
        {
            return 1f*0.65f*attacker.AttackValue*attacker.AttackValue/(attacker.AttackValue+defender.DefenceValue);
        }
    
        public static float Output410040212(BattleUnit attacker, BattleUnit defender)
        {
            return 1f*1.3f*attacker.AttackValue*attacker.AttackValue/(attacker.AttackValue+defender.DefenceValue);
        }
    
        public static float Output410050111(BattleUnit attacker, BattleUnit defender)
        {
            return 1f*2.4f*attacker.AttackValue*attacker.AttackValue/(attacker.AttackValue+defender.DefenceValue);
        }
    
        public static float Output410050211(BattleUnit attacker, BattleUnit defender)
        {
            return 1f*3*attacker.AttackValue*attacker.AttackValue/(attacker.AttackValue+defender.DefenceValue);
        }
    
        public static float Output410050212(BattleUnit attacker, BattleUnit defender)
        {
            return 1f*0;
        }
    
        public static float Output410060111(BattleUnit attacker, BattleUnit defender)
        {
            return 1f*1.3f*attacker.AttackValue*attacker.AttackValue/(attacker.AttackValue+defender.DefenceValue);
        }
    
        public static float Output410060221(BattleUnit attacker, BattleUnit defender)
        {
            return 1f*-0.4f;
        }
    
        public static float Output410060222(BattleUnit attacker, BattleUnit defender)
        {
            return 1f*1.3f*attacker.AttackValue*attacker.AttackValue/(attacker.AttackValue+defender.DefenceValue);
        }
    
        public static float Output410070111(BattleUnit attacker, BattleUnit defender)
        {
            return 1f*1.5f*attacker.AttackValue*attacker.AttackValue/(attacker.AttackValue+defender.DefenceValue);
        }
    
        public static float Output410070211(BattleUnit attacker, BattleUnit defender)
        {
            return 1f*1.7f*attacker.AttackValue*attacker.AttackValue/(attacker.AttackValue+defender.DefenceValue);
        }
    
        public static float Output410080111(BattleUnit attacker, BattleUnit defender)
        {
            return 1f*0.3f*attacker.AttackValue*attacker.AttackValue/(attacker.AttackValue+defender.DefenceValue);
        }
    
        public static float Output410080211(BattleUnit attacker, BattleUnit defender)
        {
            return 1f*1*attacker.AttackValue;
        }
    
        public static float Output410090111(BattleUnit attacker, BattleUnit defender)
        {
            return 1f*0.6f*attacker.AttackValue*attacker.AttackValue/(attacker.AttackValue+defender.DefenceValue);
        }
    
        public static float Output410090211(BattleUnit attacker, BattleUnit defender)
        {
            return 1f*1.2f*attacker.AttackValue;
        }
    
        public static float Output410100111(BattleUnit attacker, BattleUnit defender)
        {
            return 1f*0.8f*attacker.AttackValue*attacker.AttackValue/(attacker.AttackValue+defender.DefenceValue);
        }
    
        public static float Output410100211(BattleUnit attacker, BattleUnit defender)
        {
            return 1f*0.6f*attacker.AttackValue*attacker.AttackValue/(attacker.AttackValue+defender.DefenceValue);
        }
    
        public static float Output410110111(BattleUnit attacker, BattleUnit defender)
        {
            return 1f*1.01f*attacker.AttackValue*attacker.AttackValue/(attacker.AttackValue+defender.DefenceValue);
        }
    
        public static float Output410110121(BattleUnit attacker, BattleUnit defender)
        {
            return 1f*1.01f*attacker.AttackValue*attacker.AttackValue/(attacker.AttackValue+defender.DefenceValue);
        }
    
        public static float Output410110211(BattleUnit attacker, BattleUnit defender)
        {
            return 1f*1.01f*attacker.AttackValue*attacker.AttackValue/(attacker.AttackValue+defender.DefenceValue);
        }
    
        public static float Output410110221(BattleUnit attacker, BattleUnit defender)
        {
            return 1f*1.01f*attacker.AttackValue*attacker.AttackValue/(attacker.AttackValue+defender.DefenceValue);
        }
    
        public static float Output410110231(BattleUnit attacker, BattleUnit defender)
        {
            return 1f*1.69f*attacker.AttackValue*attacker.AttackValue/(attacker.AttackValue+defender.DefenceValue);
        }
    
        public static float Output410110241(BattleUnit attacker, BattleUnit defender)
        {
            return 1f*1.69f*attacker.AttackValue*attacker.AttackValue/(attacker.AttackValue+defender.DefenceValue);
        }
    
        public static float Output410110251(BattleUnit attacker, BattleUnit defender)
        {
            return 1f*2.2f*attacker.AttackValue*attacker.AttackValue/(attacker.AttackValue+defender.DefenceValue);
        }
    
        public static float Output410110261(BattleUnit attacker, BattleUnit defender)
        {
            return 1f*2.6f*attacker.AttackValue*attacker.AttackValue/(attacker.AttackValue+defender.DefenceValue);
        }
    
        public static float Output410120111(BattleUnit attacker, BattleUnit defender)
        {
            return 1f*0.2f*attacker.AttackValue*attacker.AttackValue/(attacker.AttackValue+defender.DefenceValue);
        }
    
        public static float Output410120211(BattleUnit attacker, BattleUnit defender)
        {
            return 1f*0.55f*attacker.AttackValue*attacker.AttackValue/(attacker.AttackValue+defender.DefenceValue);
        }
    
        public static float Output410130111(BattleUnit attacker, BattleUnit defender)
        {
            return 1f*0*attacker.AttackValue*attacker.AttackValue/(attacker.AttackValue+defender.DefenceValue);
        }
    
        public static float Output410130211(BattleUnit attacker, BattleUnit defender)
        {
            return 1f*1.2f*attacker.AttackValue;
        }
    
        public static float Output410130311(BattleUnit attacker, BattleUnit defender)
        {
            return 1f*2.3f*attacker.AttackValue*attacker.AttackValue/(attacker.AttackValue+defender.DefenceValue);
        }
    
        public static float Output410140111(BattleUnit attacker, BattleUnit defender)
        {
            return 1f*0.7f*attacker.AttackValue*attacker.AttackValue/(attacker.AttackValue+defender.DefenceValue);
        }
    
        public static float Output410140211(BattleUnit attacker, BattleUnit defender)
        {
            return 1f*1.2f*attacker.AttackValue*attacker.AttackValue/(attacker.AttackValue+defender.DefenceValue);
        }
    
        public static float Output410170111(BattleUnit attacker, BattleUnit defender)
        {
            return 1f*0.8f*attacker.AttackValue*attacker.AttackValue/(attacker.AttackValue+defender.DefenceValue);
        }
    
        public static float Output410170211(BattleUnit attacker, BattleUnit defender)
        {
            return 1f*0.3f*attacker.AttackValue*attacker.AttackValue/(attacker.AttackValue+defender.DefenceValue);
        }
    
        public static float Output410180111(BattleUnit attacker, BattleUnit defender)
        {
            return 1f*1.4f*attacker.AttackValue*attacker.AttackValue/(attacker.AttackValue+defender.DefenceValue);
        }
    
        public static float Output410180211(BattleUnit attacker, BattleUnit defender)
        {
            return 1f*1.8f*attacker.AttackValue*attacker.AttackValue/(attacker.AttackValue+defender.DefenceValue);
        }
    
        public static float Output410190111(BattleUnit attacker, BattleUnit defender)
        {
            return 1f*1*attacker.AttackValue*attacker.AttackValue/(attacker.AttackValue+defender.DefenceValue);
        }
    
        public static float Output410190211(BattleUnit attacker, BattleUnit defender)
        {
            return 1f*1.8f*attacker.AttackValue*attacker.AttackValue/(attacker.AttackValue+defender.DefenceValue);
        }
    
        public static float Output410200111(BattleUnit attacker, BattleUnit defender)
        {
            return 1f*1.04f*attacker.AttackValue*attacker.AttackValue/(attacker.AttackValue+defender.DefenceValue);
        }
    
        public static float Output410200231(BattleUnit attacker, BattleUnit defender)
        {
            return 1f*0.78f*attacker.AttackValue*attacker.AttackValue/(attacker.AttackValue+defender.DefenceValue);
        }
    
        public static float Output410210111(BattleUnit attacker, BattleUnit defender)
        {
            return 1f*0.6f*attacker.AttackValue*attacker.AttackValue/(attacker.AttackValue+defender.DefenceValue);
        }
    
        public static float Output410210112(BattleUnit attacker, BattleUnit defender)
        {
            return 1f*-0.4f;
        }
    
        public static float Output410210211(BattleUnit attacker, BattleUnit defender)
        {
            return 1f*0.6f*attacker.AttackValue*attacker.AttackValue/(attacker.AttackValue+defender.DefenceValue);
        }
    
        public static float Output410210212(BattleUnit attacker, BattleUnit defender)
        {
            return 1f*0;
        }
    
        public static float Output410220111(BattleUnit attacker, BattleUnit defender)
        {
            return 1f*1.04f*attacker.AttackValue*attacker.AttackValue/(attacker.AttackValue+defender.DefenceValue);
        }
    
        public static float Output410220211(BattleUnit attacker, BattleUnit defender)
        {
            return 1f*1.95f*attacker.AttackValue*attacker.AttackValue/(attacker.AttackValue+defender.DefenceValue);
        }
    
        public static float Output410230111(BattleUnit attacker, BattleUnit defender)
        {
            return 1f*0.1f*attacker.AttackValue*attacker.AttackValue/(attacker.AttackValue+defender.DefenceValue);
        }
    
        public static float Output410230211(BattleUnit attacker, BattleUnit defender)
        {
            return 1f*0.5f*attacker.AttackValue*attacker.AttackValue/(attacker.AttackValue+defender.DefenceValue);
        }
    
        public static float Output410240111(BattleUnit attacker, BattleUnit defender)
        {
            return 1f*1.04f*attacker.AttackValue*attacker.AttackValue/(attacker.AttackValue+defender.DefenceValue);
        }
    
        public static float Output410240211(BattleUnit attacker, BattleUnit defender)
        {
            return 1f*1.3f*attacker.AttackValue*attacker.AttackValue/(attacker.AttackValue+defender.DefenceValue);
        }
    
        public static float Output430010111(BattleUnit attacker, BattleUnit defender)
        {
            return 1f*0.8f*attacker.AttackValue*attacker.AttackValue/(attacker.AttackValue+defender.DefenceValue);
        }
    
        public static float Output430020111(BattleUnit attacker, BattleUnit defender)
        {
            return 1f*0.2f*attacker.AttackValue*attacker.AttackValue/(attacker.AttackValue+defender.DefenceValue);
        }
    
        public static float Output430030111(BattleUnit attacker, BattleUnit defender)
        {
            return 1f*2*attacker.AttackValue*attacker.AttackValue/(attacker.AttackValue+defender.DefenceValue);
        }
    
        public static float Output430040111(BattleUnit attacker, BattleUnit defender)
        {
            return 1f*2*attacker.AttackValue*attacker.AttackValue/(attacker.AttackValue+defender.DefenceValue);
        }
    
        public static float Output430040211(BattleUnit attacker, BattleUnit defender)
        {
            return 1f*2*attacker.AttackValue*attacker.AttackValue/(attacker.AttackValue+defender.DefenceValue);
        }
    
        public static float Output430050111(BattleUnit attacker, BattleUnit defender)
        {
            return 1f*0.2f*attacker.AttackValue*attacker.AttackValue/(attacker.AttackValue+defender.DefenceValue);
        }
    
        public static float Output430060111(BattleUnit attacker, BattleUnit defender)
        {
            return 1f*1.5f*attacker.AttackValue*attacker.AttackValue/(attacker.AttackValue+defender.DefenceValue);
        }
    
        public static float Output430070111(BattleUnit attacker, BattleUnit defender)
        {
            return 1f*1.5f*attacker.AttackValue*attacker.AttackValue/(attacker.AttackValue+defender.DefenceValue);
        }
    
        public static float Output430080111(BattleUnit attacker, BattleUnit defender)
        {
            return 1f*0.4f*attacker.AttackValue*attacker.AttackValue/(attacker.AttackValue+defender.DefenceValue);
        }
    
        public static float Output430090111(BattleUnit attacker, BattleUnit defender)
        {
            return 1f*0.8f*attacker.AttackValue*attacker.AttackValue/(attacker.AttackValue+defender.DefenceValue);
        }
    
        public static float Output420010111(BattleUnit attacker, BattleUnit defender)
        {
            return 1f*1.2f*attacker.AttackValue*attacker.AttackValue/(attacker.AttackValue+defender.DefenceValue);
        }
    
        public static float Output420020111(BattleUnit attacker, BattleUnit defender)
        {
            return 1f*0.8f*attacker.AttackValue*attacker.AttackValue/(attacker.AttackValue+defender.DefenceValue);
        }
    
        public static float Output420030111(BattleUnit attacker, BattleUnit defender)
        {
            return 1f*0.3f*attacker.AttackValue*attacker.AttackValue/(attacker.AttackValue+defender.DefenceValue);
        }
    
        public static float Output420040111(BattleUnit attacker, BattleUnit defender)
        {
            return 1f*2*attacker.AttackValue*attacker.AttackValue/(attacker.AttackValue+defender.DefenceValue);
        }
    
        public static float Output420050111(BattleUnit attacker, BattleUnit defender)
        {
            return 1f*0.3f*attacker.AttackValue*attacker.AttackValue/(attacker.AttackValue+defender.DefenceValue);
        }
    
        public static float Output420050211(BattleUnit attacker, BattleUnit defender)
        {
            return 1f*2*attacker.AttackValue*attacker.AttackValue/(attacker.AttackValue+defender.DefenceValue);
        }
    
        public static float Output420060111(BattleUnit attacker, BattleUnit defender)
        {
            return 1f*1*attacker.AttackValue*attacker.AttackValue/(attacker.AttackValue+defender.DefenceValue);
        }
    
        public static float Output420070111(BattleUnit attacker, BattleUnit defender)
        {
            return 1f*1*attacker.AttackValue*attacker.AttackValue/(attacker.AttackValue+defender.DefenceValue);
        }
    
        public static float Output420080111(BattleUnit attacker, BattleUnit defender)
        {
            return 1f*1*attacker.AttackValue*attacker.AttackValue/(attacker.AttackValue+defender.DefenceValue);
        }
    
        public static float Output420090111(BattleUnit attacker, BattleUnit defender)
        {
            return 1f*1*attacker.AttackValue*attacker.AttackValue/(attacker.AttackValue+defender.DefenceValue);
        }
    
        public static float Output420100111(BattleUnit attacker, BattleUnit defender)
        {
            return 1f*1*attacker.AttackValue*attacker.AttackValue/(attacker.AttackValue+defender.DefenceValue);
        }
    
        public static float Output420110111(BattleUnit attacker, BattleUnit defender)
        {
            return 1f*5*attacker.AttackValue*attacker.AttackValue/(attacker.AttackValue+defender.DefenceValue);
        }
    
        public static float Output420110112(BattleUnit attacker, BattleUnit defender)
        {
            return 1f*0*attacker.AttackValue*attacker.AttackValue/(attacker.AttackValue+defender.DefenceValue);
        }
    
        public static float Output420210111(BattleUnit attacker, BattleUnit defender)
        {
            return 1f*1.3f*attacker.AttackValue*attacker.AttackValue/(attacker.AttackValue+defender.DefenceValue);
        }
    
        public static float Output10101(BattleUnit attacker, BattleUnit defender)
        {
            return 1f*5*attacker.AttackValue*attacker.AttackValue/(attacker.AttackValue+defender.DefenceValue);
        }
    
        public static float Output10201(BattleUnit attacker, BattleUnit defender)
        {
            return 1f*2*attacker.AttackValue*attacker.AttackValue/(attacker.AttackValue+defender.DefenceValue);
        }
    
        public static float Output10202(BattleUnit attacker, BattleUnit defender)
        {
            return 1f*2;
        }
    
        public static float Output10301(BattleUnit attacker, BattleUnit defender)
        {
            return 1f*5*attacker.AttackValue*attacker.AttackValue/(attacker.AttackValue+defender.DefenceValue);
        }
    
        public static float Output10401(BattleUnit attacker, BattleUnit defender)
        {
            return 1f*2.5f*attacker.AttackValue*attacker.AttackValue/(attacker.AttackValue+defender.DefenceValue);
        }
    
        public static float Output10402(BattleUnit attacker, BattleUnit defender)
        {
            return 1f*0;
        }
    
        public static float Output105(BattleUnit attacker, BattleUnit defender)
        {
            return 1f*0;
        }
    
        public static float Output510020111(BattleUnit attacker, BattleUnit defender)
        {
            return 1f*2*attacker.AttackValue*attacker.AttackValue/(attacker.AttackValue+defender.DefenceValue);
        }
    
        public static float Output510020211(BattleUnit attacker, BattleUnit defender)
        {
            return 1f*4*attacker.AttackValue*attacker.AttackValue/(attacker.AttackValue+defender.DefenceValue);
        }
    
        public static float Output510070111(BattleUnit attacker, BattleUnit defender)
        {
            return 1f*1.5f*attacker.AttackValue*attacker.AttackValue/(attacker.AttackValue+defender.DefenceValue);
        }
    
        public static float Output510070211(BattleUnit attacker, BattleUnit defender)
        {
            return 1f*1.5f*attacker.AttackValue*attacker.AttackValue/(attacker.AttackValue+defender.DefenceValue);
        }
    
        public static float Output510040111(BattleUnit attacker, BattleUnit defender)
        {
            return 1f*0.5f*attacker.AttackValue*attacker.AttackValue/(attacker.AttackValue+defender.DefenceValue);
        }
    
        public static float Output510040112(BattleUnit attacker, BattleUnit defender)
        {
            return 1f*-0.4f;
        }
    
        public static float Output510040113(BattleUnit attacker, BattleUnit defender)
        {
            return 1f*0;
        }
    
        public static float Output510040211(BattleUnit attacker, BattleUnit defender)
        {
            return 1f*0.5f*attacker.AttackValue*attacker.AttackValue/(attacker.AttackValue+defender.DefenceValue);
        }
    
        public static float Output510010111(BattleUnit attacker, BattleUnit defender)
        {
            return 1f*1.5f*attacker.AttackValue*attacker.AttackValue/(attacker.AttackValue+defender.DefenceValue);
        }
    
        public static float Output510010211(BattleUnit attacker, BattleUnit defender)
        {
            return 1f*1.5f*attacker.AttackValue*attacker.AttackValue/(attacker.AttackValue+defender.DefenceValue);
        }
    
        public static float Output510080111(BattleUnit attacker, BattleUnit defender)
        {
            return 1f*0.28f*attacker.AttackValue*attacker.AttackValue/(attacker.AttackValue+defender.DefenceValue);
        }
    
        public static float Output510080211(BattleUnit attacker, BattleUnit defender)
        {
            return 1f*3*attacker.AttackValue*attacker.AttackValue/(attacker.AttackValue+defender.DefenceValue);
        }
    
        public static float Output510030111(BattleUnit attacker, BattleUnit defender)
        {
            return 1f*3*attacker.AttackValue*attacker.AttackValue/(attacker.AttackValue+defender.DefenceValue);
        }
    
        public static float Output510030211(BattleUnit attacker, BattleUnit defender)
        {
            return 1f*1.5f*attacker.AttackValue*attacker.AttackValue/(attacker.AttackValue+defender.DefenceValue);
        }
    
        public static float Output510050111(BattleUnit attacker, BattleUnit defender)
        {
            return 1f*1.5f*attacker.AttackValue*attacker.AttackValue/(attacker.AttackValue+defender.DefenceValue);
        }
    
        public static float Output510050211(BattleUnit attacker, BattleUnit defender)
        {
            return 1f*1.5f*attacker.AttackValue*attacker.AttackValue/(attacker.AttackValue+defender.DefenceValue);
        }
    
        public static float Output510060111(BattleUnit attacker, BattleUnit defender)
        {
            return 1f*0.23f*attacker.AttackValue*attacker.AttackValue/(attacker.AttackValue+defender.DefenceValue);
        }
    
        public static float Output510060211(BattleUnit attacker, BattleUnit defender)
        {
            return 1f*1.5f*attacker.AttackValue*attacker.AttackValue/(attacker.AttackValue+defender.DefenceValue);
        }
    
        public static float Output600001011(BattleUnit attacker, BattleUnit defender)
        {
            return 1f*4;
        }
    
        public static float Output600001021(BattleUnit attacker, BattleUnit defender)
        {
            return 1f*0;
        }
    
        public static float Output600001022(BattleUnit attacker, BattleUnit defender)
        {
            return 1f*0.05f*defender.TotalHp;
        }
    
    }
}   
    